from flask import g
from flask import request
from flask import session, jsonify

from info.models import User, News, Category
from info.utils.commons import user_login_data
from info.utils.response_code import RET
from . import index_blue
from flask import render_template, current_app
from info import redis_store

"""首页新闻列表展示"""
"""
请求路径:"/newslist"
请求方式:"get"
请求参数:"cid  page  pre_page"
返回值: data数据
"""
@index_blue.route('/newslist')

def news_list():
	# .1.获取参数
	cid = request.args.get("cid")
	page = request.args.get("page", 1)  # 如果获取不到数据　默认为第一页
	pre_page = request.args.get("pre_page", 10)  # 如果获取不到数据　默认为10条数据
	# 2.校验参数 参数类型转换
	try:
		page = int(page)
		pre_page = int(pre_page)
	except Exception as e:
		current_app.logger.error(e)
		page = 1
		pre_page = 10
	# 3.分页查询
	try:
		# 判断分类编号是否不等于1
		filters = []
		if cid != "1":
			filters.append(News.category_id == cid)
		paginate = News.query.filter(*filters).order_by(News.create_time.desc()).paginate(page,pre_page,False)
	except Exception as e:
		current_app.logger.error(e)
		return jsonify(errno=RET.DBERR,errmsg="获取新闻失败")
	# 4 获取到分页对象属性　总页数　当前页　当前页对象
	totalPages = paginate.pages
	currentPage = paginate.page
	items = paginate.items
	# 5.将新闻对象列表转为字典列表
	newsList = []
	for news in items:
		newsList.append(news.to_dict())
	# 6.返回响应　携带数据
	return jsonify(errno=RET.OK,errmsg="获取成功",newsList=newsList,totalPage=totalPages,currentPage=currentPage)
"""首页内容"""
@index_blue.route("/")
@user_login_data
def test():
	# # .获取session中的用户信息
	# user_id = session.get("user_id")
	# user = None
	# # .获取用户对象
	# if user_id:
	# 	try:
	# 		user = User.query.get(user_id)
	# 	except Exception as e:
	# 		current_app.logger.error(e)

	# 查询热门新闻前十条
	try:
		news_list = News.query.order_by(News.clicks.desc()).limit(10).all()
	except Exception as e:
		current_app.logger.error(e)
		return jsonify(errno=RET.DBERR, errmsg="新闻查询失败")
	# 将新闻对象列表转换为字典列表
	click_new_list = []
	for news in news_list:
		click_new_list.append(news.to_dict())

	# 查询分类对象
	try:
		categories = Category.query.all()
	except Exception as e:
		current_app.logger.error(e)
		return jsonify(errno=RET.DBERR, errmsg="获取分类失败")
	# 将分类对象列表转为字典列表
	category_list = []
	for category in categories:
		category_list.append(category.to_dict())
	data = {
		"user_info": g.user.to_dict() if g.user else "",
		"click_new_list": click_new_list,
		"categories": category_list
	}

	return render_template("news/index.html", data=data)


"""浏览器在访问每一个网页时，都会发送一个GET请求，向/favicon.ico地址获取log
app中提供了send_static_file方法自动寻找static静态文件下的资源"""


@index_blue.route("/favicon.ico")
def get_web_log():
	return current_app.send_static_file("news/favicon.ico")
